package main

import "fmt"

//使用指针接收者实现接口

type Animal interface {
	setName(name string)
}

type TomCat struct {
	Name string
}

func (t *TomCat) setName(name string) {
	t.Name = name
}

func AnimalSetName(animal Animal, name string) {
	animal.setName(name)
}

func main() {

	tomcat := TomCat{
		Name: "tom",
	}
	//这里的tomcat必须使用&tomcat的形式，值类型的对象只有（t T) 结构的方法
	//直接使用tomcat，传入AnimalSetName时会提示tomcat实现的setName方法是一个指针接收者的方法，
	//所以需要把tomcat转换成指针引用的形式
	//错误信息：setName' method has a pointer receiver
	AnimalSetName(&tomcat, "123")

	fmt.Println(tomcat) //能够修改实例的属性
}
